package com.lh.jianzhioffer.专项练习.字符串;

/**
 * @author: linghao
 * @since: 2023/3/21
 *
 * 某种外星语也使用英文小写字母，但可能顺序 order 不同。字母表的顺序（order）是一些小写字母的排列。
 *
 * 给定一组用外星语书写的单词 words，以及其字母表的顺序 order，只有当给定的单词在这种外星语中按字典序排列时，返回 true；否则，返回 false
 *
 */
public class 外星语言是否排序034 {

    public boolean isAlienSorted(String[] words, String order) {
        int[] ints = new int[26];
        for(int i=0;i<order.length();i++){
            ints[order.charAt(i)- 'a']=i;
        }

        for(int i=1;i<words.length;i++){
            boolean valid = false;
            for(int j=0;j<words[i].length() && j<words[i-1].length();j++){
                int i1 = ints[words[i].charAt(j) - 'a'];
                int i2 = ints[words[i-1].charAt(j) - 'a'];
                //["hello","leetcode"]
                //"hlabcdefgijkmnopqrstuvwxyz"    例如这个例子为 true
                if(i1 > i2){   //前面有几位排序正确的就按几位算
                    valid = true;
                    break;
                }
                if(i1 < i2){
                    return false;
                }
            }
            //符合排序规则的不需要检测字符长度了
            if(!valid){
                if(words[i].length()<words[i-1].length())return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println('r'-'f');
    }
}
